home *** CD-ROM | disk | FTP | other *** search
/ isnet Internet / Isnet Internet CD.iso / prog / hiz / 09 / 09.exe / adynware.exe / perl / lib / site / HTML / FormatText.pm < prev    next >
Encoding:
Perl POD Document  |  1999-12-28  |  3.3 KB  |  177 lines

  1. package HTML::FormatText;
  2.  
  3.  
  4. =head1 NAME
  5.  
  6. HTML::FormatText - Format HTML as text
  7.  
  8. =head1 SYNOPSIS
  9.  
  10.  require HTML::FormatText;
  11.  $html = parse_htmlfile("test.html");
  12.  $formatter = new HTML::FormatText;
  13.  print $formatter->format($html);
  14.  
  15. =head1 DESCRIPTION
  16.  
  17. The HTML::FormatText is a formatter that outputs plain latin1 text.
  18. All character attributes (bold/italic/underline) are ignored.
  19. Formatting of HTML tables and forms is not implemented.
  20.  
  21. =head1 SEE ALSO
  22.  
  23. L<HTML::Formatter>
  24.  
  25. =head1 COPYRIGHT
  26.  
  27. Copyright (c) 1995 Gisle Aas. All rights reserved.
  28.  
  29. This library is free software; you can redistribute it and/or
  30. modify it under the same terms as Perl itself.
  31.  
  32. =head1 AUTHOR
  33.  
  34. Gisle Aas <aas@oslonett.no>
  35.  
  36. =cut
  37.  
  38. require HTML::Formatter;
  39.  
  40. @ISA = qw(HTML::Formatter);
  41.  
  42. use strict;
  43.  
  44. sub begin
  45. {
  46.     my $self = shift;
  47.     $self->HTML::Formatter::begin;
  48.     $self->{lm}  =    3;  # left margin
  49.     $self->{rm}  =   70;  # right margin
  50.     $self->{curpos} = 0;  # current output position.
  51.     $self->{maxpos} = 0;  # highest value of $pos (used by header underliner)
  52. }
  53.  
  54. sub end
  55. {
  56.     shift->collect("\n");
  57. }
  58.  
  59.  
  60. sub header_start
  61. {
  62.     my($self, $level, $node) = @_;
  63.     $self->vspace(1 + (6-$level) * 0.4);
  64.     $self->{maxpos} = 0;
  65.     $self->eat_leading_space;
  66.     1;
  67. }
  68.  
  69. sub header_end
  70. {
  71.     my($self, $level, $node) = @_;
  72.     if ($level <= 2) {
  73.     my $line;
  74.     $line = '=' if $level == 1;
  75.     $line = '-' if $level == 2;
  76.     $self->vspace(0);
  77.     $self->out($line x ($self->{maxpos} - $self->{lm}));
  78.     }
  79.     $self->vspace(1);
  80.     1;
  81. }
  82.  
  83. sub hr_start
  84. {
  85.     my $self = shift;
  86.     $self->vspace(1);
  87.     $self->out('-' x ($self->{rm} - $self->{lm}));
  88.     $self->vspace(1);
  89. }
  90.  
  91. sub pre_out
  92. {
  93.     my $self = shift;
  94.     if (defined $self->{vspace}) {
  95.     if ($self->{out}) {
  96.         $self->nl() while $self->{vspace}-- > -0.5;
  97.         $self->{vspace} = undef;
  98.     }
  99.     }
  100.     my $indent = ' ' x $self->{lm};
  101.     my $pre = shift;
  102.     $pre =~ s/\n/\n$indent/g;
  103.     $self->collect($pre);
  104.     $self->{out}++;
  105. }
  106.  
  107. sub out
  108. {
  109.     my $self = shift;
  110.     my $text = shift;
  111.  
  112.     if (defined $self->{vspace}) {
  113.     if ($self->{out}) {
  114.         $self->nl while $self->{vspace}-- >= 0;
  115.         $self->goto_lm;
  116.     } else {
  117.         $self->goto_lm;
  118.     }
  119.     $self->{vspace} = undef;
  120.     }
  121.  
  122.     if ($self->{curpos} > $self->{rm}) { # line is too long, break it
  123.     return if $text =~ /^\s*$/;  # white space at eol is ok
  124.     $self->nl;
  125.     $self->goto_lm;
  126.     }
  127.  
  128.     if ($self->{pending_space}) {
  129.     $self->{pending_space} = 0;
  130.     $self->collect(' ');
  131.     my $pos = ++$self->{curpos};
  132.     $self->{maxpos} = $pos if $self->{maxpos} < $pos;
  133.     }
  134.  
  135.     $self->{pending_space} = 1 if $text =~ s/\s+$//;
  136.     return unless length $text;
  137.  
  138.     $self->collect($text);
  139.     my $pos = $self->{curpos} += length $text;
  140.     $self->{maxpos} = $pos if $self->{maxpos} < $pos;
  141.     $self->{'out'}++;
  142. }
  143.  
  144. sub goto_lm
  145. {
  146.     my $self = shift;
  147.     my $pos = $self->{curpos};
  148.     my $lm  = $self->{lm};
  149.     if ($pos < $lm) {
  150.     $self->{curpos} = $lm;
  151.     $self->collect(" " x ($lm - $pos));
  152.     }
  153. }
  154.  
  155. sub nl
  156. {
  157.     my $self = shift;
  158.     $self->{'out'}++;
  159.     $self->{pending_space} = 0;
  160.     $self->{curpos} = 0;
  161.     $self->collect("\n");
  162. }
  163.  
  164. sub adjust_lm
  165. {
  166.     my $self = shift;
  167.     $self->{lm} += $_[0];
  168.     $self->goto_lm;
  169. }
  170.  
  171. sub adjust_rm
  172. {
  173.     shift->{rm} += $_[0];
  174. }
  175.  
  176. 1;
  177.